# 定义变量，静态库和动态库名称
static-lib := libmymath.a
dy-lib := libmymethod.so

# 生成静态库 libmymath.a
$(static-lib): mymath.o
	ar -rc $@ $^

# 编译 mymath.o
mymath.o: mymath.c
	gcc -c $^

# 生成动态库 libmymethod.so，依赖 mylog.o 和 myprint.o
$(dy-lib): mylog.o myprint.o
	gcc -shared -o $@ $^

# 编译 mylog.o，使用 -fPIC 生成位置无关代码（动态库需要）
mylog.o: mylog.c
	gcc -fPIC -c $^

# 编译 myprint.o，使用 -fPIC
myprint.o: myprint.c
	gcc -fPIC -c $^

# 伪目标 clean，用于清理编译生成的文件
.PHONY: clean
clean:
	rm -rf *.o *.a *.so mylib

# 伪目标 output，用于整理头文件和库文件到 mylib 目录
.PHONY: output
output:
	mkdir -p mylib/include
	mkdir -p mylib/lib
	cp *.h mylib/include
	cp $(static-lib) mylib/lib
	cp $(dy-lib) mylib/lib
